package day08;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.net.URISyntaxException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;

/**
 * 使用异常捕获机制完成下述读取操作，并在finally中有关闭RandomAccessFile操作。
 * 将emp.dat文件中所有员工解析出来，并创建为若干Emp实例存入一个
 * 集合，然后按照员工入职从晚到早的顺序依次输出员工信息。
 * 
 * 该文件560字节，每56个字节为一个员工的信息。
 * 其中:
 * 	 name为字符串，长度为32个字节，编码为:UTF-8
 *   age为short,长度为2个字节
 * 	 gender为字符串，长度为10个字节，编码为:UTF-8
 * 	 salary为int,长度为4个字节
 * 	 hiredate为long，长度为8个字节
 * 格式可参考当前包中emp.jpg图
 * @author Bonnie
 *
 */
public class Test05 {
	public static void main(String[] args) {
		List<Emp> list = new ArrayList<Emp>();
		RandomAccessFile raf = null;
		try {
			raf = new RandomAccessFile(new File(Test05.class.getClassLoader().getResource("day08/emp.dat").toURI()), "r");
			
			for (int i = 0; i < 10; i++) {
				byte[] bs = new byte[32];
				raf.read(bs);
				String name = new String(bs, "UTF-8").trim();
				int age = raf.readShort();
				bs = new byte[10];
				String gender = new String(bs, "UTF-8").trim();
				int salary = raf.readInt();
				long time = raf.readLong();//time = System.currentTimeMillis();
				Date hiredate = new Date(time);
//				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//				System.out.println(sdf.format(hiredate));
				Emp emp = new Emp(name, age, gender, salary, hiredate);
//				System.out.println(emp);
				list.add(emp);
			}
			
//			for (Emp e : list) {
//				System.out.println(e);
//			}
			// 按入职时间排序
			Collections.sort(list,new Comparator<Emp>() {
				@Override
				public int compare(Emp o1, Emp o2) {
					return (o2.getHiredate().getTime() - o1.getHiredate().getTime()) > 0 ? 1 : -1;
				}
			});
			System.out.println("排序后：");
			for (Emp e : list) {
				System.out.println(e);
			}
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (URISyntaxException e1) {
				e1.printStackTrace();
		} catch (IOException e) {
				e.printStackTrace();
		}finally {
			try {
				raf.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
